package com.zjj.learn.javaplus.pkg03.demo302;

public class TestDemo302_1 {

    public static void main(String[] args) {
        // 外部类名称.内部类名称 对象名称 = new 外部类名称.内部类构造器
        OuterClass.Inner in = new OuterClass.Inner();
        in.setName("张三");
        in.setAge(12);
        System.out.println(in.getName());
        System.out.println(in.getAge());
        in.show();
    }


    /**
     * 内部类【类的五大成分之一】
     * 什么是内部类？
     *    定义在一个类里面的类就是内部类
     *
     *
     * 内部类有什么用？
     *     可以提供更好的封装性, 内部类有更多权限修饰符 , 封装性有更多的控制。
     *     可以体现出组件的思想。
     *
     *  内部类的分类:
     *      （1）静态内部类。
     *      （2）实例内部类。（成员内部类）
     *      （3）局部内部类。
     *      （4）匿名内部类。【重点】
     **/


    /**
     *
     *     目标：静态内部类的研究（了解语法即可）
     *
     *     什么是静态内部类？ {@link com.zjj.learn.javaplus.pkg03.demo302.OuterClass.Inner}
     *         有static修饰，属于外部类本身，会加载一次。
     *
     *     静态内部类中的成分研究：
     *         类有的成分它都有，静态内部类属于外部类本身，只会加载一次
     *         所以它的特点与外部类是完全一样的，只是位置在别人里面而已。
     *
     *         外部类=宿主
     *         内部类=寄生
     *
     *     静态内部类的访问格式：
     *         外部类名称.内部类名称
     *         例如：OuterClass.Inner in = new OuterClass.Inner();
     *     静态内部类创建对象的格式：
     *         外部类名称.内部类名称 对象名称 = new 外部类名称.内部类构造器;
     *
     *     静态内部类的访问拓展：
     *         静态内部类中是否可以直接访问外部类的静态成员? 可以的，外部类的静态成员只有一份，可以被共享！
     *         静态内部类中是否可以直接访问外部类的实例成员? 不可以的,外部类的是成员必须用外部类对象访问！！
     *     小结：
     *          静态内部类属于外部类本身，只会加载一次
     *          所以它的特点与外部类是完全一样的，只是位置在别人里面而已。
     **/
}
